package bootstrap

import (
	"fmt"
	"go-mp-starter/global"
	"os"

	"github.com/fsnotify/fsnotify"
	"github.com/spf13/viper"
)

// InitConfig 加载Yaml文件到全局配置
func InitConfig() *viper.Viper {
	config := "config.yaml"
	// 设置VIPER_CONFIG环境变量来改变加载的配置文件
	if configEnv := os.Getenv("VIPER_CONFIG"); configEnv != "" {
		config = configEnv
	}

	vp := viper.New()
	vp.SetConfigFile(config)
	vp.SetConfigType("yaml")

	if err := vp.ReadInConfig(); err != nil {
		panic(fmt.Errorf("read config fail: %s", err))
	}
	// 监听配置文件
	vp.OnConfigChange(func(in fsnotify.Event) {
		fmt.Println("config file changed:", in.Name)
		// 配置赋值给全局变量
		if err := vp.Unmarshal(&global.App.Config); err != nil {
			fmt.Println(err)
		}
	})
	if err := vp.Unmarshal(&global.App.Config); err != nil {
		fmt.Println(err)
	}
	return vp
}
